﻿/**
 * \file Program.cs
 * \author Nicolas VAILLIET
 * \author Aurelien MADIOT
 * \date 2 janvier 2013
 * \version 1.0
 * \brief Programme de test du moteur
 * \details Permet de lancer un jeu en mode de débugage console.
 * Des intéractions sont possibles via des menus d'actions.
 * Cependant toutes les rêgles du jeu ne s'appliquent pas.
 */


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using InterfaceJeu;
using ImplementationJeu;
using WrapperSwigCreaCarte;

namespace ModelingProject1Lib
{

    /**
     * \class Program
     * \author Nicolas VAILLIET
     * \date 2 janvier 2013
     * \version 1.0
     * \brief Programme de test du moteur
     */
    class Program
    {
        internal static int indexCourant;
        internal static String DateDebut;
        internal static String DateFin;
        internal static List<Case> lesCasesRecup = new List<Case>();

        static void Main(string[] args)
        {
           ImplementationJeu.Jeu monJeu = ImplementationJeu.Jeu.Instance;

            //Creation des joueurs
           ImplementationJeu.Joueur j1 = new ImplementationJeu.Joueur("Nicolas", System.Drawing.Color.Red, "INFO");
           ImplementationJeu.Joueur j2 = new ImplementationJeu.Joueur("Aurelien", System.Drawing.Color.Azure, "EII");
           ImplementationJeu.Joueur j3 = new ImplementationJeu.Joueur("Jack", System.Drawing.Color.Yellow, "EII");
           ImplementationJeu.Joueur j4 = new ImplementationJeu.Joueur("Jedi", System.Drawing.Color.Purple, "INFO");
           List<InterfaceJeu.Joueur> lj = new List<InterfaceJeu.Joueur>();
            lj.Add(j1);
            lj.Add(j2);
            lj.Add(j3);
            lj.Add(j4);

            monJeu.demarrerNouveuJeu(lj, 100);
            //ImplementationJeu.Jeu.Instance.printJeuProperties();
            //monJeu.jouerLeJeu();

            /*ImplementationJeu.Jeu.Instance.Joueurs[0].civilisation.unites[1].getSerialInfo();
            ImplementationJeu.Jeu.Instance.Joueurs[0].civilisation.villes[0].getSerialInfo();*/
            ImplementationJeu.Jeu.Instance.Carte.obtenirCase(new ImplementationJeu.Coordonnees(0)).getSerialInfo();

            /*Unite unit = ImplementationJeu.Jeu.Instance.Joueurs[0].civilisation.unites[0];
            Console.Write(unit.ToString()+"\n");*/

            //Test de chargement pour la création de toutes les cases
            /*indexCourant = 0;
            DateDebut = DateTime.Now.ToString("h:mm:ss.fff");
            while (indexCourant < 10000)
            {
                Console.Write(indexCourant);
                InterfaceJeu.Coordonnees cc = new ImplementationJeu.Coordonnees(indexCourant%10000);
                lesCasesRecup.Add(ImplementationJeu.Jeu.Instance.Carte.fabriqueCase.obtenirCase(cc));
                lesCasesRecup[0].unites.Add(ImplementationJeu.Jeu.Instance.Joueurs[0].civilisation.creerEtudiant(cc));
                indexCourant++;
            }
            Console.Clear();
            DateFin = DateTime.Now.ToString("h:mm:ss.fff");
            Console.Write("Heure de lancement : " + DateDebut + "\n");
            Console.Write("Heure apres traitement : "+DateFin + "\n");
            Console.Write("Nbre de cases récupérées : " + lesCasesRecup.Count + "\n");
            Console.Write("Nbre d'unité crées : " + ImplementationJeu.Jeu.Instance.Joueurs[0].civilisation.unites.Count + "\n");*/

           // ImplementationJeu.Jeu.Instance.sauvegarderPartie("testSeral1.xml");

            /*ImplementationJeu.Coordonnees c1 = new ImplementationJeu.Coordonnees(0, 0);
            ImplementationJeu.Coordonnees c2 = new ImplementationJeu.Coordonnees(0, 0);
            Console.Write(c1 == c2);
            Console.WriteLine();
            ImplementationJeu.Coordonnees c3 = new ImplementationJeu.Coordonnees(153);
            Console.Write(c3.abscisse + ":" + c3.ordonnee + "\n");
            Console.Write(c3.getIndex() + "\n");*/

            // Test d'un combat
            /*Etudiant u1 = new EtudiantINFO();
            u1.position = new ImplementationJeu.Coordonnees(2, 2);
            Case ca = new CaseMontagne(3,2);
            Unite u2 = new EtudiantEII();
            ca.unites.Add(u2);
            u1.combattre(ca);*/
            

            //Test des actions des unités
            /*Case ca = monJeu.Carte.obtenirCase(new ImplementationJeu.Coordonnees(2, 2));
            Case cb = monJeu.Carte.obtenirCase(new ImplementationJeu.Coordonnees(4, 4));

            Unite etud = new EtudiantEII();
            etud.position = ca.coordo;
            ca.unites.Add(etud);
            
            Console.Write("Position etud : "+etud.position.abscisse + ":" + etud.position.ordonnee);
            Console.WriteLine();
            Console.Write("NbMouv etud : " + etud.nbMouvement);
            Console.WriteLine();*/

            //Test du déplacement
            /*etud.seDeplacer(cb);
            Console.Write("Position etud : " + etud.position.abscisse + ":" + etud.position.ordonnee);
            Console.WriteLine();
            Console.Write("NbMouv etud : " + etud.nbMouvement);
            Console.WriteLine();
            */

            //Test perte et récupe de vie
            /*etud.recupererVie();
            Console.Write("vie etud : " + etud.pointDeVie);
            Console.WriteLine();

            etud.perdreVie();
            Console.Write("vie etud : " + etud.pointDeVie);
            Console.WriteLine();

            etud.perdreVie();
            Console.Write("vie etud : " + etud.pointDeVie);
            Console.WriteLine();

            etud.recupererVie();
            Console.Write("vie etud : " + etud.pointDeVie);
            Console.WriteLine();
             * */

            //Test resauration de fin de tour
            /*
            etud.seRestaureApresUnTour();
            Console.Write("vie etud : " + etud.pointDeVie);
            Console.WriteLine();
            Console.Write("NbMouv etud : " + etud.nbMouvement);
            Console.WriteLine();
            */

            Console.Write("Fin du programme !\n");
            Console.ReadKey(true);
            
        }       
    }
}
